/*
 * @Author: 13177709051 3506463075@qq.com
 * @Date: 2024-10-17 00:50:42
 * @LastEditors: 13177709051 3506463075@qq.com
 * @LastEditTime: 2024-10-17 00:54:34
 * @FilePath: /cjb/linux-operating-system-network/linux10/code/code.c
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(void)
{
    pid_t pid;
    if ((pid = fork()) == -1)
        perror("fork"), exit(1);
    if (pid == 0)
    {
        sleep(20);
        exit(10);
    }
    else
    {
        int st;
        int ret = wait(&st);

        if (ret > 0 && (st & 0X7F) == 0)
        { // 正常退出
            printf("child exit code:%d\n", (st >> 8) & 0XFF);
        }
        else if (ret > 0)
        { // 异常退出
            printf("sig code : %d\n", st & 0X7F);
        }
    }
}
// 如果 ret 大于 0，表示成功获取到子进程的结束状态。然后通过 (st & 0X7F) 检查是否正常退出（返回值为0表示正常退出）。如果正常退出，程序输出子进程的退出代码（使用 (st >> 8) & 0XFF 右移8位并取低8位，得到退出码）。
// 如果子进程不是正常退出，说明子进程可能是由于某个信号而被终止，父进程则输出该信号的代码（使用 st & 0X7F 获取低7位）。